/*
 * 03文件随机读写.c
 *
 *  Created on: 2024年3月18日
 *      Author: sulei_zhang
 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<sys/types.h>
#include<sys/stat.h>

int main1103(){
	FILE* fp = fopen("D:/zsl/a.txt", "r");
	if(!fp){
		return -1;
	}
	char arr[100];
	memset(arr, 0, 100);
	fgets(arr, 100, fp);
	printf("%s", arr); // 123456789

	memset(arr, 0, 100);
	fgets(arr, 100, fp);
	printf("%s", arr); // 你愁啥

	// 文件随机读写
	// stream: 已经打开的文件指针
	// offset: 根据whence来移动的位移数(偏移量)，可以是正数，也可以负数，如果正数，则相对于whence往右移动；如果是负数，则相对于whence往左移动。如果向前移动的字节数超过了文件开头则出错返回；，如果向后移动的字节数超过了文件末尾，再次写入时将增大文件尺寸。
	// whence: 其取值如下:
	// SEEK_SET: 从文件开头移动offset个字节
	// SEEK_CUR: 从当前位置移动offset个字节
	// SEEK_END: 从文件末尾移动offset个字节
	fseek(fp, 11, SEEK_SET); // 从文件开头开始偏移123456789\r\n
	memset(arr, 0, 100);
	fgets(arr, 100, fp);
	printf("%s", arr); // 你愁啥
	return 0;
}

int main110301(){
	// a: 追加方式，不能改变原始内容，只能追加新内容
	// r+: 可读可写方式
	FILE* fp = fopen("D:/zsl/a.txt", "r+");
	if(!fp){
		return -1;
	}
	// 返回光标位置
	long pos = ftell(fp);
	printf("%d\n", pos); // 0

	fseek(fp, -10, SEEK_END);
	pos = ftell(fp);
	printf("%d\n", pos);

	fputs("ok\n", fp);

	// 重置光标到起始位置
	rewind(fp);

	close(fp);
	return 0;
}
